package socketmvc.core.packets.basic;

import com.alibaba.fastjson.JSONObject;
import socketmvc.core.packets.biz.SockFile;

import java.util.Map;

public interface IFilePacket {

    /*文件名称标识*/
    String FILENAME_KEY = "@file";
    /*文件零件的标识,是文件零件时此key上存储零件的必要信息例如 {总字节数,起始索引,结束索引}*/
    String FILE_PART_KEY = "@file-part";

    /**
     * 获取文件名
     *
     * @return 文件名
     */
    default String getFilename(){
        return this.getFileBinaryDesc().get(FILENAME_KEY).toString();
    }

    /**
     * 获取文件
     * @return 文件
     */
    default SockFile toFile(){
        SockFile file = new SockFile(getFileBinary(),getFilename());
        JSONObject part = (JSONObject) this.getFileBinaryDesc().get(FILE_PART_KEY);
        if (part != null && part.getBooleanValue("part")){
            file.part(part.getInteger("total"),part.getInteger("start"),part.getInteger("end"));
        }
        return file;
    }

    // 文件的二进制部分描述信息
    Map<String,Object> getFileBinaryDesc();

    // 文件的二进制内容
    byte[] getFileBinary();

}
